/* axios 二次封装 */
import axios from 'axios'
import { message as Message } from 'antd'
import { userResetActionCreator } from '../actions/user'
import { store } from '../store'

Message.config({
  maxCount: 1,
})

// BASE_URL
// const baseURL = process.env.NODE_ENV === 'development' ? 'http://162.14.108.31:8888/api/v1' : 'http://162.14.108.31:8888/api/v1'

// 创建 axios 实例
const service = axios.create({
  baseURL: process.env.REACT_APP_AXIOS_BASE_URL,
  // baseURL,
  timeout: 5000,
  // withCredentials: true,
})

// 请求拦截
service.interceptors.request.use(config => {
  // TODO: 向请求头添加 token 传递
  const token = store.getState().user.token
  config.headers['Authorization'] = 'Bearer ' + token

  return config
})

// 响应拦截
service.interceptors.response.use(response => {
  if (response.status >= 200 && response.status < 300) {
    // 获取后端接口返回的数据
    const { code, data, message } = response.data
    if (code === 200) {
      return data
    }

    // token 有异常，则前端应该清理保存的用户登录
    // 状态数据，然后重新跳转到登录页面进行登录
    if (code >= 5000 && code <= 5008) {
      store.dispatch(userResetActionCreator()) // 更新 store 中的状态数据，重置用户数据
    }
    const error = new Error('异常：' + message)
    Message.error(message)
    return Promise.reject(error)
  }
}, err => {
  Message.error(err.message)
})

export default service
